#include <bits/stdc++.h>

#define in read()
#define fi first
#define se second
#define pb push_back
#define rep(i, x, y) for(int i = (x); i <= (y); i++) 
#define per(i, x, y) for(int i = (x); i >= (y); i--)

using namespace std;

using ll = long long;
using db = double;
using pii = pair < db , db >;
using vec = vector < db >;
using veg = vector < pii >;

int read() {
	int x = 0; bool f = 0; char ch = getchar(); while(!isdigit(ch)) f |= ch == '-', ch = getchar(); 
	while(isdigit(ch)) x = x * 10 + (ch ^ 48), ch = getchar(); return f ? -x : x;
}

const int N = 1e5 + 10;

int n, K, T;
int x[N];

void gen(vec a, vec &g1, vec &g2) {
	g1.clear(); g2.clear();
	db s = 0;
	for(auto x : a) {
		s += x; g2.pb(x);
		if(s >= 0) {
			s = 0; for(auto d : g2) g1.pb(d); g2.clear();
		}
	} reverse(g2.begin(), g2.end());
	for(auto &x : g2) x = -x;
}

void cgen(vec a, veg &g) {
	g.clear(); db s = 0, mx = 0;
	for(auto x : a) {
		s += x; mx = max(mx, -s);
		if(s >= 0) {
			g.pb({ mx, s }); s = mx = 0;
		}
	}
}

bool work(db &res, veg a, veg b) {
	auto ita = a.begin(), itb = b.begin();
	while(ita != a.end() || itb != b.end()) {
		if(ita != a.end() && res >= ita -> fi) {
			res += ita -> se; ita++;
		} else if(itb != b.end() && res >= itb -> fi) {
			res += itb -> se; itb++;
		} else return false;
	} return true;
}

bool check(int mid) {
	vec a, b, c, d;
	veg p1, p2;
	per(i, K - 1, 1) {
		a.pb(-(x[i + 1] - x[i]) / 2.0 / mid);
		a.pb(T);
	}
	rep(i, K + 1, n) {
		b.pb(-(x[i] - x[i - 1]) / 2.0 / mid);
		b.pb(T);
	}
	gen(a, a, c); gen(b, b, d);
	cgen(a, p1); cgen(b, p2);
	db res = T;
	if(!work(res, p1, p2)) return false; //cerr << res << endl;
	for(auto x : c) res -= x; for(auto x : d) res -= x; //cerr << "!" << res << " " << c.size() << " " << d.size() << endl;
	cgen(c, p1); cgen(d, p2);
	if(!work(res, p1, p2)) return false;
	return true;
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("1.in", "r", stdin);
#endif
	n = in, K = in, T = in; rep(i, 1, n) x[i] = in;
	if(x[1] == x[n]) return puts("0"), 0;
	int l = 1, r = 1e9;
	while(l <= r) {
		int mid = l + r >> 1;
		if(check(mid)) r = mid - 1;
		else l = mid + 1; 
	}
	printf("%d\n", l);
	return 0;
}
